/*
 * 例 3-4
 * 竖式问题
 *
 * 输入数字集合（相邻数字之间没有空格），
 * 找出所有形如 abc*de （三位数乘法两位数）的算式，
 * 使其在竖式计算中出现的所有数字，
 * 都是该数字集合中的。
 *
 * 输出所有竖式。
 * 每个竖式前要有编号，之后要有一个空行。
 * 最后输出解的总数。
 *
 * 样例输入：
 * 2357
 * 样例输出：
 * <1>
 *   775
 * X  33
 * -----
 *  2325
 * 2325
 * -----
 * 25575
 *
 * The number of solutions = 1
 */

#include <iostream>
#include <fstream>
#include <sstream>
#include <iomanip>
#define LOCAL
using namespace std;

const int NUM = 10;
string digits;
int main()
{
#ifdef LOCAL
    ifstream cin("in.txt");
    ofstream cout("out.txt");
#endif
    while (cin >> digits)
    {
        int n1, n2, product, count = 0;
        for (int abc = 100; abc < 1000; ++abc)
            for (int de = 10; de < 100; ++de)
            {
                n1 = de % 10 * abc;     // 乘个位 abc*e
                n2 = de / 10 * abc;     // 乘十位 abc*d
                product = n1 + n2 * 10; // 乘积 abc*de

                ostringstream res; // 存储字符化后的数字
                res << abc << de << n1 << n2 << product;
                // 将 res 和 digits 进行字符比较
                bool ok = true;
                for (auto ch : res.str())
                    if (digits.find(ch) == string::npos)
                    {
                        ok = false;
                        break;
                    }
                if (ok)
                    // 输出
                    cout << '<' << ++count << '>' << endl
                         << "  " << abc << endl
                         << 'X' << "  " << de << endl
                         << "-----" << endl
                         << setw(5) << n1 << endl
                         << setw(4) << n2 << endl
                         << "-----" << endl
                         << setw(5) << product << endl
                         << endl;
            }
        cout << "The number of solutions = " << count << endl;
    }
    return 0;
}

// 课本答案
// #include <cstdio>
// #include <cstring>
// int main()
// {
//     int count = 0;       // 记录解的个数
//     char s[20], buf[99]; // 数字集合 s，出现的所有数字的集合 buf
//     scanf("%s", s);
//     for (int abc = 111; abc < 1000; ++abc)
//     {
//         for (int de = 11; de < 100; ++de)
//         {
//             int x = abc * (de % 10), // abc 乘个位
//                 y = abc * (de / 10), // abc 乘十位
//                 z = abc * de;
//             sprintf(buf, "%d%d%d%d%d", abc, de, x, y, z); // 数字字符化
//             // 比较 s 和 buf
//             int ok = 1;
//             for (int i = 0; i < strlen(buf); ++i)
//                 if (strchr(s, buf[i]) == NULL)
//                 {
//                     ok = 0;
//                     break;
//                 }
//             if (ok)
//                 // 输出
//                 printf("<%d>\n%5d\nX%4d\n-----\n%5d\n%4d\n-----\n%5d\n\n",
//                        ++count, abc, de, x, y, z);
//         }
//     }
//     printf("The number of solutions = %d\n", count);
//     return 0;
// }